package crawler

import (
	"log"
	"net/http"
	"net/http/cookiejar"
	"net/url"
	"sync"

	"github.com/fatih/color"
)

// Ua User-Agent
const (
	Ua = "Edg/86.0.622.69"
)

// Common 共有属性
var (
	// 页数
	Page int
	// 输出路径
	Dir string
	// 间隔时间
	Duration int
	// 模拟登录
	Cookie string
	// X 代理(字符串)
	X string

	// 颜色
	Warn = color.New(color.FgHiYellow, color.Bold).SprintFunc()
	Err  = color.New(color.FgHiRed, color.Underline).SprintFunc()
	Info = color.New(color.FgHiGreen).SprintFunc()

	once sync.Once = sync.Once{}
)

// MyClient 公用的Client
var MyClient *Client

// Client 客户端
type Client struct {
	*http.Client

	// 并发控制
	sync.WaitGroup
	Ch chan struct{}
}

// GetClient 初始化客户端
func GetClient() *Client {
	once.Do(func() {
		jar, _ := cookiejar.New(nil)
		MyClient = &Client{
			&http.Client{
				Timeout: 0,
				Jar:     jar,
			},
			sync.WaitGroup{},
			make(chan struct{}, 64),
		}

		// 设置代理
		if X != "" {
			parsed, err := url.Parse(X)
			if err != nil {
				log.Fatalln("代理格式错误")
			}
			MyClient.Transport = &http.Transport{
				Proxy: http.ProxyURL(parsed),
			}
			log.Println("已设置代理", X)
		} else {
			log.Println("使用默认连接")
		}
	})
	return MyClient
}
